const linli = uniCloud.importObject('linliChat',{customUI:true});
import store from '../store';
// 核心：定义每种类型的必填参数（键：type，值：必填参数数组）
const REQUIRED_PARAMS = {
	public: [], // public 没有必要参数
	person: ['targetId'], // 个人聊天必须传 targetId
	favorite: ['favorite_id', 'favorite_name'], // 收藏必须传 ID 和名称
	group: ['groupId', 'groupName'], // 群聊必须传群 ID 和名称
	stranger: ['userTel'] // 陌生人必须传手机号
};

/**
 * 设置目标聊天对象
 * @param {string} type - 类型（public/person/favorite/group/stranger）
 * @param {Object} param - 携带参数（需包含对应类型的必填项）
 * @param {Object} store - Vuex store 实例
 */
export default async function setToTarget(type, param) {

	// 1. 基础校验
	try {
		if (!type) {
			console.error('缺少必要参数：type（必须指定类型）');
			return;
		}
		if (!param || typeof param !== 'object') {
			console.error('参数 param 必须是对象');
			return;
		}
		// 2. 校验当前类型的必填参数
		const required = REQUIRED_PARAMS[type];
		if (!required) {
			console.error(`未知类型：${type}，支持的类型有：${Object.keys(REQUIRED_PARAMS).join('/')}`);
			return;
		}
		// 检查必填参数是否缺失
		const missingParams = required.filter(key => param[key] === undefined || param[key] === null);
		if (missingParams.length > 0) {
			console.error(`类型 ${type} 缺少必填参数：${missingParams.join(', ')}`);
			// 可额外添加提示弹窗（如 uni.showToast）
			uni.showToast({
				title: `缺少参数：${missingParams.join(', ')}`,
				icon: 'none',
				duration: 3000
			});
			return; // 终止执行
		}

		// 3. 处理异步依赖（如获取用户信息）
		let userInfo = null;
		if (type === 'person') {
			userInfo = await getUserInfo(param.userId);
		}

		// 4. 构建目标对象配置
		const typeMap = {
			public: {
				targetType: '1',
				targetName: param.targetName
			},
			person: {
				targetType: '3',
				targetId: param.targetId,
				targetName: param.nicName||param.remarkName||param.friendDetail?.nicName|| '未知用户',
				nicPic: param.friendDetail?.avatar?param.friendDetail?.avatar:getUserInfo(param.targetId).nicPic?.url || ''
			},
			favorite: {
				targetType: '1',
				targetId: param.favorite_id,
				targetName: param.favorite_name
			},
			group: {
				targetType: '2',
				targetId: param.groupId,
				targetName: param.groupName
			},
			stranger: {
				targetType: '4',
				targetId: param.userTel,
				targetName: param.targetName
			}
		};
          
		  console.log({...typeMap[type]});
	
		store.commit('msg/SET_toTarget', {
			...typeMap[type]
		});
	} catch (e) {
		console.error(e);
	}

}

// 异步获取用户信息（带错误处理）
async function getUserInfo(id) {
	try {
		const res = await linli.getUserInfo(id);
		return res.code ? res.data || null : null;
	} catch (e) {
		console.error('获取用户信息失败', e);
		return null;
	}
}